import { App } from 'vue';
import { openExternalUrl, isValidUrl } from '../utils/urlHandler';
import { ElMessage } from 'element-plus';

/**
 * 外部链接处理插件
 * 拦截所有a标签的点击事件，并使用系统浏览器打开外部链接
 */
export default {
  install(app: App) {
    // 添加全局点击事件监听
    document.addEventListener('click', async (event) => {
      const target = event.target as HTMLElement;
      let linkElement: HTMLAnchorElement | null = null;
      
      // 检查点击的元素是否是链接，或者是否在链接内部
      if (target.tagName === 'A') {
        linkElement = target as HTMLAnchorElement;
      } else if (target.closest('a')) {
        linkElement = target.closest('a') as HTMLAnchorElement;
      }
      
      // 如果找到链接元素并且有href属性
      if (linkElement && linkElement.href) {
        // 检查是否是外部链接（http或https开头的完整URL）
        if (linkElement.href.startsWith('http://') || linkElement.href.startsWith('https://')) {
          // 阻止默认行为
          event.preventDefault();
          
          // 对于有download属性的链接不进行拦截，让它们正常下载
          if (linkElement.hasAttribute('download')) {
            return;
          }
          
          // 获取href属性值
          const url = linkElement.href;
          
          // 验证URL是否有效
          if (!isValidUrl(url)) {
            console.error('无效的URL:', url);
            ElMessage.error('无效的URL');
            return;
          }
          
          try {
            // 使用我们的工具函数打开外部链接
            await openExternalUrl(url);
          } catch (error) {
            console.error('打开外部链接失败:', error);
            ElMessage.error('打开外部链接失败');
          }
        }
      }
    });
    
    // 注册全局组件或其他逻辑（如有需要）
  }
}; 